package wodegua.d30_网络通信;

import java.net.InetAddress;

/**
 * 什么是网络编程?
 * 可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信的)
 *
 * 基本的通信架构
 * 基本的通信架构有2种形式:CS架构(Client客户端/Server服务端)、BS架构(Browser浏览器/Server服务端)。
 *
 * Client-server(Cs)
 * Client(客户端)
 * 1.需要程序员开发。
 * 2.用户需要安装。
 * Server(服务端)
 * 1.需要程序员开发实现。
 *
 * Browser-Server(Bs)
 * Browser浏览器
 * 1.不需要程序员开发实现。
 * 2.用户需要安装浏览器。
 * Server(服务端)
 * 1.需要程序员开发实现。
 *
 * 网络通信的关键三要素
 * 1.IP:设备在网络中的地址，是唯一的标识。
 * 2.端口:应用程序在设备中唯一的标识
 * 3.协议:连接和数据在网络中传输的规则。
 *
 *
 * 一：IP地址
 * ●IP(Internet Protocol):全称”互联网协议地址”，是分配给上网设备的唯一标志。
 * ●IP地址有两种形式:IPV4、IPV6
 * IPv4->(二进制)11000000 10101000 00000001 01000010->(点分十进制表示法)192.168.1.66
 * IPv6地址
 * IPV6:共128位，号称可以为地球每一粒沙子编号。
 * IPV6分成8段表示，每段每四位编码成一个十六进制位表示，数之间用冒号(:)分开。
 * 0010 0000 0000 0001      0000 1101 1011 1000     0000 ooo0 ooo0 0o00     0000 0000 0010 0011
 * 0000 0000 0000 1000      0000 1000 0000 0000     0010 0000 0000 1100     0100 0001 01111010
 * （冒分十六进制表示法）2001:0db8:0000:0023:0008:0800:200c:417a
 *
 * 公网IP,内网IP
 * 1、公网IP:是可以连接互联网的IP地址;内网IP:也叫局域网IP，只能组织机构内部使用。
 * 2、192.168.开头的就是常见的局域网地址，范围即为192.168.0.0--192.168.255.255，专门为组织机构内部使用
 *
 * 特殊IP地址:
 * 1、127.0.0.1、localhost:代表本机IP，只会寻找当前所在的主机。
 *
 * IP常用命令:
 * 1、ipconfig:查看本机IP地址，
 * 2、pingIP地址:检查网络是否连通。
 *
 * InetAddress 代表IP地址。
 * InetAddress的常用方法如下
 * 名称
 * public static InetAddress getLocalHost()     获取本机IP，会以一个inetAddress的对象返回
 * public static InetAddress getByName(String host)     根据ip地址或者域名，返回一个inetAdress对象
 * public string getHostName()      获取该ip地址对象对应的主机名，
 * public string getHostAddress()       获取该ip地址对象中的ip地址信息。
 * public boolean isReachable(int timeout)      在指定毫秒内，判断主机与该ip对应的主机是否能连通
 *
 *
 * 二：端口
 * 1.标记正在计算机设备上运行的应用程序的，被规定为一个16位的二进制，范围是0~65535。
 *
 * 分类
 * 1.周知端口:0~1023，被预先定义的知名应用占用(如:HTTP占用80，FTP占用21)
 * 2.注册端口:1024~49151，分配给用户进程或某些应用程序。
 * 3.动态端口:49152到65535，之所以称为动态端口，是因为它一般不固定分配某种进程，而是动态分配。
 * 注意:我们自己开发的程序一般选择使用注册端口，且一个设备中不能出现两个程序的端口号一样，否则出错。
 *
 *
 * 三：通信协议
 * 网络上通信的设备，事先规定的连接规则，以及传输数据的规则被称为网络通信协议。
 *
 * 开放式网络互联标准:OSI网络参考模型
 * 1.OSI网络参考模型:全球网络互联标准。
 * 2.TCP/IP网络模型:事实上的国际标准。
 *
 * 传输层的2个通信协议
 * UDP(User Datagram Protocol):用户数据报协议;TCP(Transmission ControlProtocol):传输控制协议。
 *
 * UDP协议,通信效率高!(语音通话、视频直播)
 * 1.特点:无连接、不可靠通信。
 * 2.不事先建立连接，数据按照包发，一包数据包含:自己的IP、程序端口，目的地IP、程序端口和数据(限制在64KB内)等。
 * 3.发送方不管对方是否在线，数据在中间丢失也不管，如果接收方收到数据也不返回确认，故是不可靠的。
 *
 * TCP协议，通信效率相对不高! （网页、文件下载、支付）
 * 1.特点:面向连接、可靠通信。
 * 2.TCP的最终目的:要保证在不可靠的信道上实现可靠的传输。
 * 3.TCP主要有三个步骤实现可靠传输:三次握手建立连接，传输数据进行确认，四次挥手断开连接。
 * 可靠连接:确定通信双方，收发消息都是正常无问题的!(全双工)
 *
 */
public class d1_Test {
    public static void main(String[] args) throws Exception {
        InetAddress ip1 = InetAddress.getLocalHost();
        System.out.println(ip1.getHostName());
        System.out.println(ip1.getHostAddress());

        InetAddress ip2 = InetAddress.getByName("www.baidu.com");
        System.out.println(ip2.getHostName());
        System.out.println(ip2.getHostAddress());

        System.out.println(ip2.isReachable(1000));
    }
}
